package com.aura.blog.common;

import com.aura.blog.enums.ResultCodeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * 统一响应结果封装类
 * 用于封装接口返回的数据格式
 * 
 * @param <T> 响应数据的类型
 */
@Data
@Schema(description = "统一响应结果封装类")
public class Result<T> {
    /** 响应码 */
    @Schema(description = "响应码")
    private int code;
    
    /** 错误信息 */
    @Schema(description = "错误信息")
    private String errMsg;
    
    /** 响应数据 */
    @Schema(description = "响应数据")
    private T data;

    /**
     * 成功响应
     * 
     * @param data 响应数据
     * @param <T> 数据类型
     * @return Result对象
     */
    public static <T> Result<T> ok(T data){
        Result<T> result = new Result<>();
        result.setCode(ResultCodeEnum.SUCCESS.getCode());
        result.setData(data);
        return result;
    }

    /**
     * 错误响应
     * 
     * @param errMsg 错误信息
     * @param <T> 数据类型
     * @return Result对象
     */
    public static <T> Result<T> error(String errMsg){
        Result<T> result = new Result<>();
        result.setCode(ResultCodeEnum.ERROR.getCode());
        result.setErrMsg(errMsg);
        return result;
    }

    /**
     * 错误响应
     * 
     * @param code 错误码
     * @param errMsg 错误信息
     * @param <T> 数据类型
     * @return Result对象
     */
    public static <T> Result<T> error(int code, String errMsg){
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setErrMsg(errMsg);
        return result;
    }
}